from Ashare import get_price
import pandas as pd
import os

stock_code = 'sz123189'
frequency = '5m'
output = fr'D:\work\code\clark\gitee\big_a\datas\kline_now\{stock_code}\{frequency}.json'

# 获取新数据（逻辑保持不变）
df = get_price(stock_code, frequency=frequency, count=20000)
df = df.reset_index()
if 'index' in df.columns:
    df.rename(columns={'index': 'date'}, inplace=True)
else:
    time_col = df.columns[0]
    df.rename(columns={time_col: 'date'}, inplace=True)
df['date'] = pd.to_datetime(df['date'])
df['date'] = df['date'].dt.strftime('%Y-%m-%d %H:%M:%S')

# === 新增：自动创建目录路径逻辑 === [1,4,8]
output_dir = os.path.dirname(output)  # 提取目录路径
if not os.path.exists(output_dir):  # 检查目录是否存在
    try:
        os.makedirs(output_dir, exist_ok=True)  # 递归创建目录[8]
        print(f"✅ 目录创建成功：{output_dir}")
    except OSError as e:
        print(f"❌ 目录创建失败：{e}")
        exit(1)  # 目录创建失败时退出程序
else:
    print(f"ⓘ 目录已存在：{output_dir}")

# 核心新增逻辑：追加写入并去重
if os.path.exists(output):
    # 读取现有数据
    old_df = pd.read_json(output, orient='records')

    # 1. 统一转换为Timestamp类型再排序
    old_df['date'] = pd.to_datetime(old_df['date'])  # 确保旧数据为Timestamp
    df['date'] = pd.to_datetime(df['date'])          # 新数据保持Timestamp

    # 2. 合并并去重（新数据覆盖旧数据）
    combined = pd.concat([old_df, df]).drop_duplicates('date', keep='last')

    # 3. 用Timestamp类型排序（此时可安全比较）
    combined = combined.sort_values('date').reset_index(drop=True)
    # 4. 排序后转回字符串格式（为JSON输出准备）
    combined['date'] = combined['date'].dt.strftime('%Y-%m-%d %H:%M:%S')

    # 保存合并后的完整数据集
    combined.to_json(output, orient='records', indent=4)
    print(f"✅ 数据已追加更新至 {output} (新增 {(len(combined) - len(old_df))} 条 共 {len(combined)} 条)")

else:
    # 文件不存在时直接保存
    df.to_json(output, orient='records', indent=4)
    print(f"✅ 新文件已创建于 {output} (保存 {len(df)} 条)")